#ifndef __BASIC_ORAPROC_H__
#define __BASIC_ORAPROC_H__

#include <basic/misc.h>

__BEGIN_DECLS

#define ORA_OK						0
#define ORA_ERROR					-10000
#define ORA_COL_NOT_SUPPORTED		-10001
#define ORA_BIND_NUM_DISCORD        -10002
#define ORA_NO_DATA_FOUND			1403
#define ORA_UNIQUE_VIOLATE			-1

#define ORA_CLOB_MAX_LEN            KB(512)

struct _oraproc;
typedef struct _oraproc *ORAPROC;

/*
 * 完整数据库连接（单线程）
 */
extern int
oraproc_connect(
        char *dbuser,               /* [IN] 用户 */
        char *dbpasswd,             /* [IN] 口令 */
        char *host                  /* [IN] 宿主 */
        );

/*
 * 断开数据库连接（单线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_disconnect();

/*
 * 事务开始（单线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_begin();

/*
 * 事务提交（单线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_commit();

/*
 * 事务回滚（单线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_rollback();

/*
 * 执行非查询SQL语句（单线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_exec(
        char *sql,					/* [IN] 执行的SQL语句 */
        DBC_BIND *bind,             /* [IN] 绑定变量结构 */
        int bind_num                /* [IN] 绑定变量数量 */
        );

/*
 * 执行查询SQL语句（单线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_query(
        char *sql,					/* [IN] 执行的SQL语句 */
        DBC_BIND *bind,             /* [IN] 绑定变量结构 */
        int bind_num,               /* [IN] 绑定变量数量 */
        int request_row_num,		/* [IN] 需读取的记录数 */
        DBC_RSET *rset              /* [OUT] 查询结果集，
                                       必须由dbc_query_free释放 */
        );

/*
 * 获取下一序列号（单线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_sequence_nextval(
        char *seq,					/* [IN] 序列名 */
        long *nextval			    /* [OUT] 下一序列号 */
        );

/*
 * 数据库环境初始化
 */
extern int	/* 0:成功 -1:失败，连接数错误 */
oraproc_init();

/*
 *  * 数据库环境清理
 *   */
extern int
oraproc_clean();

/*
 * 完整数据库连接（多线程）
 */
extern int
oraproc_connect_ex(
        char *dbuser,           /* [IN] 用户 */
        char *dbpasswd,         /* [IN] 口令 */
        char *host,             /* [IN] 宿主 */
        ORAPROC *pdb            /* [OUT] 接口地址 */
        );

/*
 * 断开数据库连接（多线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_disconnect_ex(
        ORAPROC db              /* [IN] 接口 */
        );

/*
 * 事务开始（多线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_begin_ex(
        ORAPROC db              /* [IN] 接口 */
        );

/*
 * 事务提交（多线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_commit_ex(
        ORAPROC db              /* [IN] 接口 */
        );

/*
 * 事务回滚（多线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_rollback_ex(
        ORAPROC db              /* [IN] 接口 */
        );

/*
 * 执行非查询SQL语句（多线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_exec_ex(
        ORAPROC db,             /* [IN] 接口 */
        char *sql,              /* [IN] 执行的SQL语句 */
        DBC_BIND *bind,         /* [IN] 绑定变量结构 */
        int bind_num            /* [IN] 绑定变量数量 */
        );

/*
 * 执行查询SQL语句（多线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_query_ex(
        ORAPROC db,             /* [IN] 接口 */
        char *sql,              /* [IN] 执行的SQL语句 */
        DBC_BIND *bind,         /* [IN] 绑定变量结构 */
        int bind_num,           /* [IN] 绑定变量数量 */
        int request_row_num,    /* [IN] 需读取的记录数 */
        DBC_RSET *rset          /* [OUT] 查询结果集，必须由dbc_query_free释放 */
        );

/*
 * 获取下一序列号（多线程）
 */
extern int	/* SQLCODE:ORACLE系统错误，常用见ORA_OK等定义 */
oraproc_sequence_nextval_ex(
        ORAPROC db,             /* [IN] 接口 */
        char *seq,              /* [IN] 序列名 */
        long *nextval           /* [OUT] 下一序列号 */
        );

__END_DECLS

#endif
